首页 > 试题广场 >

字符串合并处理

[编程题]字符串合并处理
  • 热度指数:192864 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

按照指定规则对输入的字符串进行处理。

详细描述:

第一步:将输入的两个字符串str1和str2进行前后合并。如给定字符串 "dec" 和字符串 "fab" , 合并后生成的字符串为 "decfab"

第二步:对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标的意思是字符在字符串中的位置。注意排序后在新串中仍需要保持原来的奇偶性。例如刚刚得到的字符串“decfab”,分别对下标为偶数的字符'd'、'c'、'a'和下标为奇数的字符'e'、'f'、'b'进行排序(生成 'a'、'c'、'd' 和 'b' 、'e' 、'f'),再依次分别放回原串中的偶数位和奇数位,新字符串变为“abcedf”

第三步:对排序后的字符串中的'0'~'9'、'A'~'F'和'a'~'f'字符,需要进行转换操作。
转换规则如下:
对以上需要进行转换的字符所代表的十六进制用二进制表示并倒序,然后再转换成对应的十六进制大写字符(注:字符 a~f 的十六进制对应十进制的10~15,大写同理)。
如字符 '4',其二进制为 0100 ,则翻转后为 0010 ,也就是 2 。转换后的字符为 '2'。
如字符 ‘7’,其二进制为 0111 ,则翻转后为 1110 ,对应的十进制是14,转换为十六进制的大写字母为 'E'。
如字符 'C',代表的十进制是 12 ,其二进制为 1100 ,则翻转后为 0011,也就是3。转换后的字符是 '3'。

根据这个转换规则,由第二步生成的字符串 “abcedf” 转换后会生成字符串 "5D37BF"。


数据范围:输入的字符串长度满足



输入描述:

样例输入两个字符串,用空格隔开。



输出描述:

输出转化后的结果。

示例1

输入

dec fab

输出

5D37BF
示例2

输入

ab CD

输出

3B5D

说明

合并后为abCD,按奇数位和偶数位排序后是CDab(请注意要按ascii码进行排序,所以C在a前面,D在b前面),转换后为3B5D          
示例3

输入

123 15

输出

88C4A
a,b=input().split()
s='0123456789abcdefABCDEF'
def app():
    str1=a+b
    even = sorted(str1[::2])
    odd = sorted(str1[1::2])
    if len(even)==len(odd):
        str2=''.join(e+o for e,o in zip(even,odd))
    else:
        str2 = ''.join(e + o for e, o in zip(even, odd))+even[-1]
    lst=[i for i in str2]
    for i in range(len(lst)):
        if str2[i] in s:
            int1 = bin(int(lst[i], 16))  # 16进制转为2进制,0b开头
            int2 = int1[2:]  # 2进制表示的数字字符串
            if len(int2) < 4:
                int2 = '{:0>4}'.format(int2)
            str_bin = str(int2)[::-1]
            lst[i] = str(hex(int(str_bin,2)))[2:].upper()  # 2进制转为16进制,0x开头
        else:
            pass
    print(''.join(lst))

app()

发表于 2023-09-06 22:13:50 回复(0)
为什么测试样例里面有G这个字符啊?
为什么十六进制有G?
用例输入:Eqr v9oEb12U2ur4xu7rd931G1f50qDo
预期输出:8084842CAE9B9G7D7BUFooqqrrrvuxu
发表于 2023-08-02 23:08:14 回复(2)
s=list("".join(input().split()))
s[0::2]=sorted(s[0::2])
s[1::2]=sorted(s[1::2])
for i in s:
    try:
        i=int(i,16)
        i=bin(i)[2:].rjust(4,"0")[::-1]
        i=int(i,2)
        i=hex(i)[2:]
        if i.islower():
            i=i.upper()
        print(i,end="")
    except:
        print(i,end="")

发表于 2023-06-06 13:40:29 回复(0)
def reserve(str: str):
    return str[-1::-1]

def str2Hex2Bin2SortedHexStr(s: str):
    decimalism = int(s, 16)
    binary = bin(decimalism)[2:]
    if len(binary) < 4:
        binary = (4 - len(binary)) * "0" + binary
    binary = reserve(binary)
    hexStr = hex(int(binary, 2))[2:]
    if hexStr.isalpha():
        return hexStr.upper()
    else:
        return hexStr

def step1(str1: str, str2: str):
    return str1 + str2

def step2(mergeStr: str):
    strLength = len(mergeStr)
    evenIndexStr = []
    oddIndexStr = []
    for i in range(strLength):
        if i%2 != 0:    # odd digit index
            oddIndexStr.append(mergeStr[i])
        else:   # even digit index
            evenIndexStr.append(mergeStr[i])
    evenIndexStr = sorted(evenIndexStr)
    oddIndexStr = sorted(oddIndexStr)
    res = ""
    for i in range(len(evenIndexStr)):
        res += evenIndexStr[i]
        try:
            res += oddIndexStr[i]
        except Exception as e:
            # print(e)
            pass
    return res

def step3(sortedStr: str):
    str1 = "ABCDEF" 
    str2 = "abcdef"
    res = ""
    strList = list(sortedStr)
    for i in range(len(strList)):
        if (strList[i] in str1)&nbs***bsp;(strList[i] in str2)&nbs***bsp;(strList[i].isdigit()):
            if strList[i].isalpha():
                strList[i] = strList[i].lower()
            res += str2Hex2Bin2SortedHexStr(strList[i])
        else:
            res += strList[i]
    return res
str1, str2 = map(str, input().strip().split(" "))
print(step3(step2(step1(str1, str2))))
#冲冲冲

发表于 2023-04-26 01:23:13 回复(1)
s=input().split()
s1=s[0]+s[1]
odds=[]
odds_other=[]
#两个字符串str1和str2进行前后合并
for i in range(len(s1)):
    if i%2==0:
        odds.append(s1[i])
    else:
        odds_other.append(s1[i])
odds.sort()
odds_other.sort()
after_s1=''
#两个字符串str1和str2进行前后合并
for i in range(len(odds_other)):
    after_s1+=odds[i]+odds_other[i]
if len(odds)>len(odds_other):
    after_s1+=odds[len(odds)-1]
#两个字符串str1和str2进行前后合并
z=''
for i in after_s1:
    temp=''
    if i.isdigit():
        temp=bin(int(i))
        if len(temp[2:])<4:
            temp=(4-len(temp[2:]))*'0'+temp[2:]
    elif i.isalpha:
        if str(i.upper()) in('ABCDEF'):
            temp=bin(ord(i.upper())-55)[2:]
        else:
            z+=i
            continue
    else:
        continue  
    temp1=str(temp[::-1])
    if 'b0' in temp1:
        temp1=temp1.replace('b0','')
    if int(temp1,2)>9:
        z+=str(chr(int(temp1,2)+55)).upper()
    else:
        z+=str(hex(int(temp1,2))[2:]).upper()
print(z)
发表于 2023-01-04 18:37:05 回复(0)
进制问题,python中自带进制转换
s0, s1 = input().split()
# 转换一
s = s0 + s1
# 转换二
ji, ou = [], []
for i in range(len(s)):
    if i % 2 == 0:
        ou.append(s[i])
    else:
        ji.append(s[i])

ji.sort()
ou.sort()
tmp = 0
s = ''
while ji and ou:
    if tmp == 0:
        s += ou[0]
        ou = ou[1:]
        tmp = 1
    elif tmp == 1:
        s += ji[0]
        ji = ji[1:]
        tmp = 0
if ji: s += ji[0]
else: s += ou[0]

# 转换三
res = ''
for c in s:
    if '0' <= c <= '9'&nbs***bsp;'A' <= c <= 'F'&nbs***bsp;'a' <= c <= 'f':
        F2A = int(c, 16)
        A2B = format(F2A, '04b')
        tA2B = A2B[::-1]
        tB2A = int(tA2B, 2)
        tA2F = hex(tB2A)[2:]
        res += tA2F.upper()
    else:
        res += c

print(res)


发表于 2022-08-29 16:02:25 回复(0)
from itertools import zip_longest

def encod(char: str):
    if char.isdigit()&nbs***bsp;ord('A') <= ord(char) <= ord('F')&nbs***bsp;ord('a') <= ord(char) <= ord('f'):
        return hex(int(bin(int(char,base=16))[2:][::-1].ljust(4,'0'),base=2))[-1].upper()
    return char

def process(s1, s2):
    s = s1 + s2
    s_even = sorted(s[::2])
    s_odd  = sorted(s[1::2])

    s_new = ''.join(map(lambda x: ''.join([x[0],x[1]]),zip_longest(s_even,s_odd,fillvalue='')))
    return ''.join(map(encod,s_new))

s = input().split(' ')

print(process(s[0],s[1]))

发表于 2022-08-26 21:59:19 回复(0)
str1, str2 = map(str, input().split())
s = str1 + str2
li = list(s)
li1 = sorted(li[::2])
li2 = sorted(li[1::2])
s1 = ""
for i in range(len(li1)):
    s1 += li1[i]
    if i < len(li2):  # 第二个列表里的字符可能会少一个
        s1 += li2[i]
# print(s1)


lis = list(s1)
for j in range(len(lis)):
    if lis[j] in "0123456789ABCDEFabcdef":
        lis[j] = hex(int(bin(int(lis[j], 16))[2:].rjust(4, "0")[::-1], 2))[2:].upper()

# print(lis)      
print("".join(lis))
发表于 2022-08-24 01:01:39 回复(0)
# 初学者按照题意一步一步做的,可能没有答案写的好,请参考。
a=''.join(input().split())
l1,l2=[],[]
for i in range(0,len(a),2):
    l1.append(a[i])
l1=sorted(l1)
for i in range(1,len(a),2):
    l2.append(a[i])
l1=sorted(l1)
l2=sorted(l2)
index1,index2=0,0
s=''
for i in range(len(a)):
    if (i+2)%2==0:
        s+=l1[index1]
        index1+=1
    else:
        s+=l2[index2]
        index2+=1
m,q='',''
for one in s:
    if one.isalpha():
        if 'A'<=one<='F'or'a'<=one<='f':
            m+=hex(int(('0b'+bin(int(one,16)).replace('0b','')[::-1]),2)).replace('0x','').upper()
        else:
            m+=one
    elif one.isdigit():
        q=bin(int(one)).replace('0b','')
        q=int(((4-len(q))*'0'+q)[::-1],2)
        if q>=10:
            m+=hex(q).replace('0x','').upper()
        else:
            m+=str(q)
print(m)

'''下面是调试用的代码'''
# m='f'
# print(m,type(m))
# q=hex(int(('0b'+bin(int(m,16)).replace('0b','')[::-1]),2)).replace('0x','')
# # q=bin(int(m,16))
# print(q,type(q))

# m='5'
# q=bin(int(m)).replace('0b','')
# q=int(((4-len(q))*'0'+q)[::-1],2)
# if q>=10:
#     q=hex(q).replace('0x','').upper()
# else:
#     q=str(q)
# print(q,type(q))

发表于 2022-08-10 10:52:52 回复(0)
##我是小白,只是根据题目一步步做
s = input().replace(' ','')
li1 = []
li2 = []
for i,m in enumerate(s):
    if i%2 == 0:
        li1.append(m)
    else:
        li2.append(m)
li1 = sorted(li1)
li2 = sorted(li2)
for i in range(len(li1)):
    li2.insert(i*2,li1[i])
st = '0123456789abcdefABCDEF'
a = ''
for _ in li2:
    if _ in st:
        _ = bin(int(_,16))[2:]
        _ = f'{_:0>4}'[::-1]
        _ = hex(int(_,2))[2:].upper()
    a+=_
print(a)
发表于 2022-08-06 21:13:03 回复(0)
s1,s2=input().split()
s=s1+s2
s1=list(s[::2])
s2=list(s[1::2])
s1.sort();s2.sort()
x=[]
for i in range(len(s)):
    if i%2 ==0:
        x.append(s1.pop(0))
    else:
        x.append(s2.pop(0))
s=''
ss='0123456789abcdefABCDEF'
for i in x:
    if i in ss:
        i=bin(int(i,16))[2:]
        i=i.rjust(4,'0')
        i=i[::-1]
        i=hex(int(i,2)).upper()[2]
    s+=i
print(s)
发表于 2022-07-29 19:07:11 回复(0)